package org.toxsoft.uskat.s5.utils.schedules;

import java.util.Date;

/**
 * Расписание календаря
 * <p>
 * Возможные настройки календаря представлены шире, чем описано в данном интерфейсе.
 * <p>
 * Более подробно о возможностях описания календаря смотри:
 * http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html
 *
 * @author mvk
 */
public interface IScheduleExpression {

  /**
   * Возвращает cекунды.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"0-59"</b>, <b>"0,1,3-7"</b>.
   * <p>
   * Значение по умолчанию: <b>"0"</b>.
   *
   * @return String секунды
   */
  String getSecond();

  /**
   * Возвращает минуты.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"0-59"</b>, <b>"0,1,3-7"</b>.
   * <p>
   * Значение по умолчанию: <b>"0"</b>.
   *
   * @return String минуты
   */
  String getMinute();

  /**
   * Возвращает часы.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"0-23"</b>, <b>"0,1,3-7"</b>.
   * <p>
   * Значение по умолчанию: <b>"0"</b>.
   *
   * @return String часы
   */
  String getHour();

  /**
   * Возвращает дни месяца.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"1-31"</b>, <b>"0,1,3-7"</b>.
   * <p>
   * Значение по умолчанию: <b>"*"</b>.
   *
   * @return String дни месяца
   */
  String getDayOfMonth();

  /**
   * Возвращает месяцы.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"1-12"</b>, <b>"1,3-7"</b>.
   * <p>
   * Значение по умолчанию: <b>"*"</b>.
   *
   * @return String месяцы
   */
  String getMonth();

  /**
   * Возвращает дни недели.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"0-7"</b> где <b>"0"</b> и <b>"7"</b> это
   * воскресенье, <b>"0,1,3-7"</b>.
   * <p>
   * Значение по умолчанию: <b>"*"</b>.
   *
   * @return String дни недели.
   */
  String getDayOfWeek();

  /**
   * Возвращает годы.
   * <p>
   * Примеры значений: <b>"*"</b>, <b>"*&#47N"</b> где N - число, <b>"1900-2100"</b>, <b>"2015,2016,2015-2020"</b>.
   * <p>
   * Значение по умолчанию: <b>"*"</b>.
   *
   * @return String годы
   */
  String getYear();

  /**
   * Возвращает часовой пояс.
   * <p>
   * Значение по умолчанию: пустая строка (системный часовой пояс)
   *
   * @return String часовой пояс. пустая строка: параметр не определен
   */
  String getTimezone();

  /**
   * Возвращает метку времени начала работы календаря.
   * <p>
   * Значение по умолчанию: <b>null</b>.
   *
   * @return {@link Date} метка времени начала работы календаря. null: параметр не определен
   */
  Date getStart();

  /**
   * Возвращает метку времени завершения работы календаря.
   * <p>
   * Значение по умолчанию: <b>null</b>.
   *
   * @return {@link Date} метка времени завершения работы календаря. null: параметр не определен
   */
  Date getEnd();

}
